Snapshots or shadow copies are commonly used to recreate the state of data storage volumes or other data constructs. A snapshot is a record of the state of a volume or other data construct at a particular time e.g., a snapshot time. Snapshots are commonly used to create backup copies of data storage volumes. Different techniques are used for different types of snapshots. For example, some snapshots are a complete copy of the volume. A backup client creates a backup copy of the volume, then, by transferring the complete copy snapshot to a secure data storage location. Some snapshots are differential and include only the data blocks of a volume that have changed since the snapshot time. For snapshots of this kind, the backup client creates the backup copy by copying the snapshot as well as any data blocks from the volume that are not represented in the snapshot (i.e., those data blocks that have not been modified since the snapshot time).
Creating a full backup copy of a volume using a snapshot or other mechanism often requires considerable system resources and can take an undesirably long time. For example, a complete copy snapshot must be read and copied to a secure backup storage location. When a differential snapshot is used, the backup copy must be recreated from the snapshot and the in-use volume. Backup can be streamlined by using differential or incremental backup techniques. According to differential techniques, a full backup copy of a volume is created, for example, from a snapshot of the volume. After the full backup copy is created, one or more differential backup copies are created with reference to the full backup copy. Each differential backup copy includes only data blocks that have been modified since the last full backup copy was created. The backed-up volume can be restored, then, by applying the full backup copy and the most recent differential backup copy. Incremental techniques also utilize a full backup copy. A first incremental backup copy is generated including data blocks that have been modified since the full backup copy was created. Subsequent incremental backup copies include data blocks that have been modified since the most recent incremental backup copy was created. In this way, each incremental backup copy is referenced either to the full backup copy (e.g., the first incremental backup copy) or to a prior incremental backup copy.
Both differential and incremental backup techniques require the backup client to identify data blocks that have changed since the creation of a prior backup copy. This can be accomplished by comparing a hash or checksum of each data block on the volume to a hash of checksum of the equivalent location in the prior backup copy. This process is often computationally expensive as the entire volume must be read to determine which data blocks have changed.